package giteetest.Jdbc.testjdbc;

import java.sql.*;
import java.util.Scanner;

/**
 * @author SWJ
 * @create 2021-07-05 9:17
 * <p>
 * 六，作业
 * –1，利用jdbc查询user的信息，如果信息正确就登录，否则提示错误
 * -1，创建user表，指定字段id name password，并添加数据
 *
 *          /**1注册驱动
 *          * 2获取连接
 *          * 3获取传输器
 *          * 4执行SQL
 *          * 5解析结果集
 *          * 6释放资源
 *          */


public class Jdbc01 {
    public static void main(String[] args) throws Exception {

        method1();
        mathod2();
    }


    private static void method1() throws Exception {
//模拟登陆：根据用户名和密码查询user表
        //注册驱动
        Class.forName("com.mysql.jdbc");
        //获取连接
        //   String url="jdbc:mysql://localhost:3306/cbg2011?characterEncoding=utf8";
        //简写省略本机端口号
        String url = "jdbc:mysql:///cbg2011?characterEncoding=utf8";
        Connection conn = DriverManager.getConnection(url, "root", "199881");
        //执行SQL,根据用户名和密码查库
        System.out.println("请输入用户名：");
        String inputName = new Scanner(System.in).nextLine();
        System.out.println("请输入您的密码：");
        String inputPassWord = new Scanner(System.in).nextLine();
        //输入jack'# 注释可以直接注释后面的语句不需要密码输入
        // 只是把#后进行注解
        // SQL攻击/SQL注入问题
        //本质问题因为用户输入的问题的特殊符号造成了SQL语意发生了改变。
        String sql = "select *from tb_user1 where name=?and password=?";
        //' '是" "是字符串类型"+ a +"是引用的是拼接a方法传入的数据类型参数
        //?是创建占位符号 表示代表了所有的字符和元素

        /*获取传输器Statement接口 不安全Statement st = conn.createStatement();*/
        PreparedStatement ps = conn.prepareStatement(sql);
        /*java中PreparedStatement和Statement详细讲解
         大家都知道PreparedStatement对象可以防止sql注入，而Statement不能防止sql注入
         PreparedStatement方法是创建时就要新建sql语句 是把SQL骨架和参数分开发送给数据

         1.单独给SQL设置参数--指定给哪个问号赋给什么值*/
        ps.setString(1, inputName);
        //输入的是第一个？问号是判断InputName的数值并且规定输入的类型
        ps.setString(2, inputPassWord);

        //执行SQL 根据用户名和密码查库
        ResultSet rs = ps.executeQuery();
        //5解析结果集
        if (rs.next()) {
            //如果查询数据查到了数据next()返回ture,就可以登陆
            System.out.println("登陆成功--");
        } else {
            System.out.println("登陆失败--");
        }

        //6释放资源
        rs.close();
        //释放结果集
        ps.close();
        //释放传输器
        //释放连接器
        conn.close();
    }

    private static void mathod2() {


    }
}
